package com.dz.controller;

import com.dz.service.ContentService;
import lombok.NonNull;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.List;
import java.util.Map;

@RestController
public class ContentController {
    @Resource
    private ContentService contentService;
    //高级写法
    /*@NonNull
    private RestHighLevelClient client;

    public static final String INDEX_NAME = "jd_goods";

    *//*
    @PostConstruct该注解被用来修饰一个非静态的void（）方法。
    被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行，并且只会被服务器执行一次。
    PostConstruct在构造函数之后执行，init（）方法之前执行
    *//*
    @PostConstruct
    public void initIndex(){
        ElasticsearchUtil util = new ElasticsearchUtil(client);
        util.createIndex(INDEX_NAME);
    }*/

    /**
     * 爬取数据并存入ES中
     * @param keyword 关键字
     * @return
     * @throws IOException
     */
    @GetMapping("/parse/{keyword}")
    public Boolean parse(@PathVariable("keyword") String keyword) throws IOException {
        return contentService.parseContent(keyword);
    }

    /**
     * 模拟搜索，支持关键字高亮
     * @param keyword 关键字
     * @param pageNo 当前页
     * @param pageSize 页面大小
     * @return
     * @throws IOException
     */
    @GetMapping("/search/{keyword}/{pageNo}/{pageSize}")
    public List<Map<String, Object>> search(@PathVariable("keyword") String keyword,
                                            @PathVariable("pageNo") int pageNo,
                                            @PathVariable("pageSize") int pageSize) throws IOException {
        return contentService.searchPage(keyword,pageNo,pageSize);
    }
}
